package tp.disenio.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.VerticalPanel;



public class FixtureUNA extends Composite {
	
	private Button btnLogin;
	private Button btnHome;
	private Button btnResultadosBsqueda;
	private Button btnPrimerFecha;
	private Button btnAnteriorFecha;
	private Button btnSiguienteFecha;
	private Button btnUltimaFecha;
	private FlexTable flexTable;
	private PushButton pshbtnFixture;
	private PushButton pshbtnTablaDePosiciones;
	private TextBox txtBxNombre;
	private TextBox txtBxModalidad;
	private TextBox txtBxDeporte;
	private TextBox txtBxEstadodecompetencia;
	private TextBox txtBxUsuarioCompetencia;
	private TextBox txtBxUserLogin;
	private PasswordTextBox txtBxPassLogin;
	private Label lblNumeroFecha;
	private Label lblCantidadFechas;
	private Label lblFechaCompuesta;	
	private CompetenciaDTO competencia;
	private ArrayList<ResultadoDTO> listadoFecha;
	private ArrayList<String> listadoBotonResultado = new ArrayList<String>();
	private final RootPanel rootPanel;
	
	


	public FixtureUNA(CompetenciaDTO competencia) {
		
		rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		setCompetencia(competencia);
		
		
		
		// WIDGETS 
		
		btnLogin = new Button("Login");
		absolutePanel.add(btnLogin, 910, 80);
		btnLogin.setSize("50", "10");
		
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
		
		btnResultadosBsqueda = new Button("Volver a B\u00FAsqueda");
		absolutePanel.add(btnResultadosBsqueda, 160, 100);
	
		btnPrimerFecha = new Button("<<");
		absolutePanel.add(btnPrimerFecha,290,245);
		
		btnAnteriorFecha = new Button("<");
		absolutePanel.add(btnAnteriorFecha,340,245);
		
		btnSiguienteFecha = new Button(">");
		absolutePanel.add(btnSiguienteFecha,380,245);
		
		btnUltimaFecha = new Button(">>");
		absolutePanel.add(btnUltimaFecha,420,245);
		
		pshbtnFixture = new PushButton("Fixture");
		absolutePanel.add(pshbtnFixture, 763, 216);
		pshbtnFixture.setSize("131px", "18px");
		
		pshbtnTablaDePosiciones = new PushButton("Tabla de Posiciones");
		absolutePanel.add(pshbtnTablaDePosiciones, 763, 278);
		pshbtnTablaDePosiciones.setSize("131px", "18px");
	
		
		txtBxUsuarioCompetencia = new TextBox();
		absolutePanel.add(txtBxUsuarioCompetencia, 760, 350);
		txtBxUsuarioCompetencia.setSize("135px", "15px");
		

		txtBxUserLogin = new TextBox();
		absolutePanel.add(txtBxUserLogin, 770, 70);
		txtBxUserLogin.setSize("120px", "10px");
		
		txtBxPassLogin = new PasswordTextBox();
		absolutePanel.add(txtBxPassLogin, 770, 95);
		txtBxPassLogin.setSize("120px", "10px");
		
		txtBxNombre = new TextBox();
		absolutePanel.add(txtBxNombre, 150, 210);
		txtBxNombre.setSize("135px", "15px");
		
		txtBxModalidad = new TextBox();
		absolutePanel.add(txtBxModalidad, 300, 210);
		txtBxModalidad.setSize("135px", "15px");
		
		txtBxDeporte = new TextBox();
		absolutePanel.add(txtBxDeporte, 450, 210);
		txtBxDeporte.setSize("135px", "15px");
		
		txtBxEstadodecompetencia = new TextBox();
		absolutePanel.add(txtBxEstadodecompetencia, 600, 210);
		txtBxEstadodecompetencia.setSize("135px", "15px");
		
		ScrollPanel scrollPanelCompetencias = new ScrollPanel();
		absolutePanel.add(scrollPanelCompetencias, 205, 280);
		scrollPanelCompetencias.setSize("520px", "180px");
		
		flexTable = new FlexTable();
		scrollPanelCompetencias.setWidget(flexTable);
		flexTable.setSize("100%", "100%");
		

		
		// LABELS 
		
		Label lblFecha = new Label("Fecha");
		lblFecha.setStyleName("expresionLabel");
		absolutePanel.add(lblFecha,500,250);
		
		lblNumeroFecha = new Label("1");
		lblCantidadFechas = new Label("20");
		
		lblFechaCompuesta = new Label();
		lblFechaCompuesta.setStyleName("expresionLabel");
		cargarNumeroFecha();
		absolutePanel.add(lblFechaCompuesta,555,250);
		
		Label labelUserLogin = new Label("Usuario");
		labelUserLogin.setStyleName("usuarioLabel");
		absolutePanel.add(labelUserLogin,700,70);
					
		Label labelPasswordLogin = new Label("Pass");
		labelPasswordLogin.setStyleName("usuarioLabel");
		absolutePanel.add(labelPasswordLogin,700,95);
		
		Label lblInformacionDeLa = new Label("INFORMACION DE LA COMPETENCIA");
		lblInformacionDeLa.setStyleName("subTituloInformacionCompetencia");
		absolutePanel.add(lblInformacionDeLa, 275, 140);
		
		
		lblInformacionDeLa.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				setVisibilidad(false);
				rootPanel.add(new VerCompetenciaUNA(getCompetenciaDTO()),100,50);
			
			}
		});
		
		
		Label lblNombre = new Label("Nombre ");
		lblNombre.setStyleName("label");
		absolutePanel.add(lblNombre, 200, 190);
		
		Label lblModalidad = new Label("Modalidad");
		lblModalidad.setStyleName("label");
		absolutePanel.add(lblModalidad, 340, 190);
		lblModalidad.setSize("45px", "18px");
		
		Label lblDeporte = new Label("Deporte");
		lblDeporte.setStyleName("label");
		absolutePanel.add(lblDeporte, 500, 190);
		lblDeporte.setSize("45px", "18px");
		
		Label lblEstadodecompetencia = new Label("Estado");
		lblEstadodecompetencia.setStyleName("label");
		absolutePanel.add(lblEstadodecompetencia, 650, 190);
		
		Label lblUsuario = new Label("Usuario");
		lblUsuario.setStyleName("label");
		absolutePanel.add(lblUsuario, 800, 330);
		
		
		
			
		// Iniciando
		
		 	cargarDatosCompetencia();
		 	
			CargarFixture();
			
		//HANDLERS

		 getBtnHome().addClickHandler(new ClickHandler() {
				
				@Override
				public void onClick(ClickEvent event) {
				
					setVisibilidad(false);
					rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
				   
				}
			});
		 
		 getBtnResultadosBsqueda().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				setVisibilidad(false);
				rootPanel.add(new ListarCompetenciasDeportivasUNA(),125,65);
				
			}
		});
		
		 

		 
		
		getPshbtnTablaDePosiciones().addClickHandler(new ClickHandler(
				) {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
				setVisibilidad(false);
				rootPanel.add(new TablaDePosicionesUNA(getCompetenciaDTO()),100,50);
				
			}
		});
		
		
	
		
		
		
		getBtnPrimerFecha().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
				getLblNumeroFecha().setText(1+"");
				
				cargarNumeroFecha();
			}
		});


		getBtnAnteriorFecha().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
				int numeroFecha = Integer.parseInt(getLblNumeroFecha().getText());
				if(numeroFecha>0){
					
					getLblNumeroFecha().setText((numeroFecha-1)+"");
					cargarNumeroFecha();
				}
				
			
				
			}
		});
		
		getBtnSiguienteFecha().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
				int numeroFecha = Integer.parseInt(getLblNumeroFecha().getText());
				int ultimaFecha = Integer.parseInt(getLblCantidadFechas().getText());
				if(numeroFecha<ultimaFecha){
					
					getLblNumeroFecha().setText((numeroFecha+1)+"");
					cargarNumeroFecha();
				}
				
				
			}
		});
		 
		getBtnUltimaFecha().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
				int ultimaFecha = Integer.parseInt(getLblCantidadFechas().getText());
								
					getLblNumeroFecha().setText((ultimaFecha)+"");
					cargarNumeroFecha();
								
				
			}
		});

		
		getBtnLogin().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {

				
				final LoginServiceAsync loginService = GWT.create(LoginService.class);
				
				final DialogBox dialogBox = new DialogBox();
				final Button dialogBoxButton = new Button("Ok");
				final Label textToServerLabel = new Label();
				final HTML serverResponseLabel = new HTML();
				
				// Handler boton de dialogBox
				dialogBoxButton.addClickHandler(new ClickHandler() {
					public void onClick(ClickEvent event) {
						dialogBox.hide();
					}
				});
				
				
				 AsyncCallback callback = new AsyncCallback() {
					 
					     public void onFailure(Throwable caught) {
					    	 dialogBox.setText("Auslober");
								dialogBox.setAnimationEnabled(true);
								VerticalPanel dialogVPanel = new VerticalPanel();
								dialogVPanel.addStyleName("dialogVPanel");
								dialogVPanel.add(new HTML("<b>Respuesta del servidor:</b>"));
								dialogVPanel.add(textToServerLabel);
								dialogVPanel.add(new HTML("<br>"+(String)caught.getMessage()));
								dialogVPanel.add(serverResponseLabel);
								dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
								dialogVPanel.add(dialogBoxButton);
								dialogBox.setWidget(dialogVPanel);
								dialogVPanel.setSize("250px", "100px");
								dialogBox.setPopupPosition(535,225);
								dialogBox.show();
					    }

						@Override
						public void onSuccess(Object result) {
							// TODO Auto-generated method stub
							
							setVisibilidad(false);
							rootPanel.add(new HomeUA(getTxtBxUserLogin().getText()),100,50);
							dialogBox.setText("Auslober");
							dialogBox.setAnimationEnabled(true);
							VerticalPanel dialogVPanel = new VerticalPanel();
							dialogVPanel.addStyleName("dialogVPanel");
							dialogVPanel.add(new HTML("<b>Respuesta del servidor:</b>"));
							dialogVPanel.add(textToServerLabel);
							dialogVPanel.add(new HTML("<br>"+(String)result));
							dialogVPanel.add(serverResponseLabel);
							dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
							dialogVPanel.add(dialogBoxButton);
							dialogBox.setWidget(dialogVPanel);
							dialogVPanel.setSize("250px", "100px");
							dialogBox.setPopupPosition(535,225);
							dialogBox.show();

							 
							
						}
					  };
					  
				loginService.loginServer(getTxtBxUserLogin().getText(),getTxtBxPassLogin().getText(),callback);
		
				
			}
		});
	
		
	}
	
     
public void cargarDatosCompetencia(){
		
		getTxtBxNombre().setText(getCompetenciaDTO().getNombre());getTxtBxNombre().setReadOnly(true);
		getTxtBxModalidad().setText(getCompetenciaDTO().getModalidad());getTxtBxModalidad().setReadOnly(true);
		getTxtBxDeporte().setText(getCompetenciaDTO().getDeporte());getTxtBxDeporte().setReadOnly(true);
		getTxtBxEstadodecompetencia().setText(getCompetenciaDTO().getEstadodecompetencia());getTxtBxEstadodecompetencia().setReadOnly(true);
		getTxtBxUsuarioCompetencia().setText(getCompetenciaDTO().getUsuario());getTxtBxUsuarioCompetencia().setReadOnly(true);
		
	}
	
	
	public void CargarFixture(){
		
		final VerFixtureServiceAsync verFixture = GWT.create(VerFixtureService.class);
		
				 
			AsyncCallback<ArrayList<ResultadoDTO>> callback = new AsyncCallback<ArrayList<ResultadoDTO>>() {
				 
			     public void onFailure(Throwable caught) {
			      // do some UI stuff to show failure
			    	 Window.alert(caught.getMessage());
			    }

				@Override
				public void onSuccess(ArrayList<ResultadoDTO> result) {
					// TODO Auto-generated method stub
			
					setListadoFecha(result);
					cargarFecha();
				}
			  };
			  
			 verFixture.getFecha(getCompetenciaDTO(),Integer.parseInt(getLblNumeroFecha().getText()), callback);
			 
			 
			 AsyncCallback<Integer> callback2 = new AsyncCallback<Integer>() {
				 
			     public void onFailure(Throwable caught) {
			      // do some UI stuff to show failure
			    	 Window.alert(caught.getMessage());
			    }

				@Override
				public void onSuccess(Integer result) {
					// TODO Auto-generated method stub
			
					getLblCantidadFechas().setText(result+"");
					cargarNumeroFecha();
					
					
					
				}
			  };
			  
			 verFixture.getCantidadDeFechas(getCompetenciaDTO(), callback2);
			
		
	}

	
		public void cargarFecha(){
		
			for(int i=0;i<getListadoFecha().size();i++){
						
				flexTable.getRowFormatter().setStyleName(i, "FlexTable");
				flexTable.setCellPadding(6);
				flexTable.setText(i, 0,getListadoFecha().get(i).getNombreLocal());
				flexTable.setText(i, 1,getListadoFecha().get(i).getResultadoLocal()+"");
				flexTable.setText(i, 2,"VS");
				flexTable.setText(i, 3,getListadoFecha().get(i).getResultadoVisitante()+"");							
				flexTable.setText(i, 4,getListadoFecha().get(i).getNombreVisitante());
						
				
			}
	
	}

	
	
	/**
	 * @return the txtBxNombre
	 */
	public TextBox getTxtBxNombre() {
		return txtBxNombre;
	}


	/**
	 * @param txtBxNombre the txtBxNombre to set
	 */
	public void setTxtBxNombre(TextBox txtBxNombre) {
		this.txtBxNombre = txtBxNombre;
	}


	/**
	 * @return the txtBxModalidad
	 */
	public TextBox getTxtBxModalidad() {
		return txtBxModalidad;
	}


	/**
	 * @param txtBxModalidad the txtBxModalidad to set
	 */
	public void setTxtBxModalidad(TextBox txtBxModalidad) {
		this.txtBxModalidad = txtBxModalidad;
	}


	/**
	 * @return the txtBxDeporte
	 */
	public TextBox getTxtBxDeporte() {
		return txtBxDeporte;
	}


	/**
	 * @param txtBxDeporte the txtBxDeporte to set
	 */
	public void setTxtBxDeporte(TextBox txtBxDeporte) {
		this.txtBxDeporte = txtBxDeporte;
	}


	/**
	 * @return the txtBxEstadodecompetencia
	 */
	public TextBox getTxtBxEstadodecompetencia() {
		return txtBxEstadodecompetencia;
	}


	/**
	 * @param txtBxEstadodecompetencia the txtBxEstadodecompetencia to set
	 */
	public void setTxtBxEstadodecompetencia(TextBox txtBxEstadodecompetencia) {
		this.txtBxEstadodecompetencia = txtBxEstadodecompetencia;
	}



	/**
	 * @return the btnHome
	 */
	public Button getBtnHome() {
		return btnHome;
	}


	/**
	 * @return the btnResultadosBsqueda
	 */
	public Button getBtnResultadosBsqueda() {
		return btnResultadosBsqueda;
	}




	/**
	 * @return the flexTable
	 */
	public FlexTable getFlexTable() {
		return flexTable;
	}




	/**
	 * @return the pshbtnFixture
	 */
	public PushButton getPshbtnFixture() {
		return pshbtnFixture;
	}


	/**
	 * @return the btnLogin
	 */
	public Button getBtnLogin() {
		return btnLogin;
	}


	/**
	 * @return the txtBxUserLogin
	 */
	public TextBox getTxtBxUserLogin() {
		return txtBxUserLogin;
	}


	/**
	 * @return the txtBxPassLogin
	 */
	public PasswordTextBox getTxtBxPassLogin() {
		return txtBxPassLogin;
	}

	

	/**
	 * @return the pshbtnTablaDePosiciones
	 */
	public PushButton getPshbtnTablaDePosiciones() {
		return pshbtnTablaDePosiciones;
	}



	/**
	 * @return the lblNumeroFecha
	 */
	public Label getLblNumeroFecha() {
		return lblNumeroFecha;
	}


	/**
	 * @return the lblCantidadFechas
	 */
	public Label getLblCantidadFechas() {
		return lblCantidadFechas;
	}


	
	public void cargarNumeroFecha(){
		
		getLblFechaCompuesta().setText(getLblNumeroFecha().getText()+" de "+getLblCantidadFechas().getText());
		
		
	}
	

	/**
	 * @return the lblFechaCompuesta
	 */
	public Label getLblFechaCompuesta() {
		return lblFechaCompuesta;
	}
	
	/**
	 * @return the btnPrimerFecha
	 */
	public Button getBtnPrimerFecha() {
		return btnPrimerFecha;
	}


	/**
	 * @return the btnAnteriorFecha
	 */
	public Button getBtnAnteriorFecha() {
		return btnAnteriorFecha;
	}


	/**
	 * @return the btnSiguienteFecha
	 */
	public Button getBtnSiguienteFecha() {
		return btnSiguienteFecha;
	}


	/**
	 * @return the btnUltimaFecha
	 */
	public Button getBtnUltimaFecha() {
		return btnUltimaFecha;
	}
	

	public void setVisibilidad(boolean estado){
		this.setVisible(estado);
	}
	

	public ArrayList<ResultadoDTO> getListadoFecha() {
		return listadoFecha;
	}


	public void setListadoFecha(ArrayList<ResultadoDTO> listadoFecha) {
		this.listadoFecha = listadoFecha;
	}


	public ArrayList<String> getListadoBotonResultado() {
		return listadoBotonResultado;
	}


	public void setListadoBotonResultado(ArrayList<String> listadoBotonResultado) {
		this.listadoBotonResultado = listadoBotonResultado;
	}
	
	public CompetenciaDTO getCompetenciaDTO() {
		return competencia;
	}


	public void setCompetencia(CompetenciaDTO competencia) {
		this.competencia = competencia;
	}
	
	/**
	 * @return the txtBxUsuarioCompetencia
	 */
	public TextBox getTxtBxUsuarioCompetencia() {
		return txtBxUsuarioCompetencia;
	}


	/**
	 * @param txtBxUsuarioCompetencia the txtBxUsuarioCompetencia to set
	 */
	public void setTxtBxUsuarioCompetencia(TextBox txtBxUsuarioCompetencia) {
		this.txtBxUsuarioCompetencia = txtBxUsuarioCompetencia;
	}



}
